package product;

import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.ArrayList;

import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.CategoryItemLabelGenerator;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.TextAnchor;

public class LineBarChart {

	ArrayList<DetailStockData2> dsd=new ArrayList<DetailStockData2>();
	File f;
	FileInputStream fis;
	ObjectInputStream ois;
	DetailStockData2 dsd2;
	
	// Run As > Java Application 으로 실행하면 바로 확인할 수 있음.
	public static void main(String[] args) {
		
		LineBarChart graph = new LineBarChart();

		JFreeChart chart = graph.getChart();

		ChartFrame frame1 = new ChartFrame("재고 그래프", chart);

		frame1.setSize(900, 500);
		frame1.getChartPanel().setLayout(null);
		frame1.getContentPane().setLayout(null);

		frame1.setVisible(true);

	}
	public JFreeChart getChart() {

		// 데이터 생성
		DefaultCategoryDataset dataset1 = new DefaultCategoryDataset(); // 막대그래프
		// 데이터 입력 ( 값, 범례, 카테고리 )
		// 그래프 1
	try{		
			f = new File("C:\\DetailStockList.dat"); 

		FileInputStream fr = new FileInputStream(f);
		ObjectInputStream br = new ObjectInputStream(fr); // 파일을 읽어들이는데 버퍼를 사용하여, 좀 더 빠르게 읽는다. 줄단위로 읽어들임. 

		dsd= (ArrayList)br.readObject();
		
		br.close();
		fr.close();
		
		for(int j=0;j<dsd.size();j++ ){
			dsd2=dsd.get(j);			

				dataset1.addValue(dsd2.getStock(),"재고량", dsd2.getName());
		}
			// 렌더링 생성 및 세팅

			// 렌더링 생성

			final BarRenderer renderer = new BarRenderer();

			final BarRenderer renderer12 = new BarRenderer();

			final LineAndShapeRenderer renderer2 = new LineAndShapeRenderer();

			// 공통 옵션 정의

			final CategoryItemLabelGenerator generator = new StandardCategoryItemLabelGenerator();

			final ItemLabelPosition p_center = new ItemLabelPosition(
					ItemLabelAnchor.CENTER, TextAnchor.CENTER);

			final ItemLabelPosition p_below = new ItemLabelPosition(
					ItemLabelAnchor.OUTSIDE6, TextAnchor.TOP_LEFT);

			Font f1 = new Font("굴림", Font.BOLD, 13);

			Font axisF = new Font("굴림", Font.PLAIN, 14);

			renderer.setBaseItemLabelGenerator(generator);

			renderer.setBaseItemLabelsVisible(true);

			renderer.setBasePositiveItemLabelPosition(p_center);

			renderer.setBaseItemLabelFont(f1);

			// renderer.setGradientPaintTransformer(new
			// StandardGradientPaintTransformer(

			// GradientPaintTransformType.VERTICAL));

			// renderer.setSeriesPaint(0, new GradientPaint(1.0f, 1.0f,
			// Color.white, 0.0f, 0.0f, Color.blue));

			renderer.setSeriesPaint(0, new Color(0, 162, 255));

			// plot 생성

			final CategoryPlot plot = new CategoryPlot();

			// plot 에 데이터 적재

			plot.setDataset(dataset1);

			plot.setRenderer(renderer);

//			plot.setDataset(1, dataset12);

			plot.setRenderer(1, renderer12);

//			plot.setDataset(2, dataset2);

			plot.setRenderer(2, renderer2);

			// plot 기본 설정

			plot.setOrientation(PlotOrientation.VERTICAL); // 그래프 표시 방향

			plot.setRangeGridlinesVisible(true); // X축 가이드 라인 표시여부

			plot.setDomainGridlinesVisible(true); // Y축 가이드 라인 표시여부

			// 렌더링 순서 정의 : dataset 등록 순서대로 렌더링 ( 즉, 먼저 등록한게 아래로 깔림 )

			plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);

			// X축 세팅
			plot.setDomainAxis(new CategoryAxis()); // X축 종류 설정

			plot.getDomainAxis().setTickLabelFont(axisF); // X축 눈금라벨 폰트 조정

			plot.getDomainAxis().setCategoryLabelPositions(
					CategoryLabelPositions.STANDARD); // 카테고리 라벨 위치 조정

			// Y축 세팅
			plot.setRangeAxis(new NumberAxis()); // Y축 종류 설정

			plot.getRangeAxis().setTickLabelFont(axisF); // Y축 눈금라벨 폰트 조정

			// 세팅된 plot을 바탕으로 chart 생성

			final JFreeChart chart = new JFreeChart(plot);

			chart.setTitle("재고량 "); // 차트 타이틀
			return chart;
	}catch(Exception ex){
		}
	return null;	}	
	}
